funknown.h File Reference

#include <string.h>
#include "ftypes.h"

Data Structures

class  FUID
 Handling 16 Byte Globaly Unique Identifiers. More...
class  FUnknown
 The basic interface of all interfaces. More...
class  IPtr< I >
 IPtr - Smart pointer template class. More...
class  OPtr< I >
 OPtr - "owning" smart pointer used for newly created FObjects. More...
class  FUnknownPtr< I >
 FUnknownPtr - automatic interface conversion and smart pointer in one. More...
class  FVariant
 A Value of variable type. More...
struct  FReleaser
 Release an interface using automatic object (obsolete). More...

Namespaces

namespace  Steinberg

Defines

#define COM_COMPATIBLE   0
#define PLUGIN_API
#define INLINE_UID(l1, l2, l3, l4)
#define DECLARE_UID(name, l1, l2, l3, l4)   ::Steinberg::TUID name = INLINE_UID (l1, l2, l3, l4);
#define EXTERN_UID(name)   extern const ::Steinberg::TUID name;
#define DECLARE_CLASS_IID(ClassName, l1, l2, l3, l4)   static const ::Steinberg::TUID ClassName##_iid = INLINE_UID (l1, l2, l3, l4);
#define DEF_CLASS_IID(ClassName)   const ::Steinberg::FUID ClassName::iid (ClassName##_iid);
#define INLINE_UID_OF(ClassName)   ClassName##_iid
#define INLINE_UID_FROM_FUID(x)   INLINE_UID(x.getLong1 (), x.getLong2 (), x.getLong3 (), x.getLong4 ())
#define DECLARE_FUNKNOWN_METHODS
#define DELEGATE_REFCOUNT(ClassName)
#define IMPLEMENT_REFCOUNT(ClassName)
#define FUNKNOWN_CTOR   { __funknownRefCount = 1; }
#define FUNKNOWN_DTOR
#define QUERY_INTERFACE(iid, obj, InterfaceIID, InterfaceName)
#define IMPLEMENT_QUERYINTERFACE(ClassName, InterfaceName, ClassIID)
#define IMPLEMENT_FUNKNOWN_METHODS(ClassName, InterfaceName, ClassIID)

Typedefs

typedef int64 LARGE_INT
typedef int8 TUID [16]
 plain UID type

Enumerations

enum  {
  kNoInterface = -1, kResultOk, kResultTrue = kResultOk, kResultFalse,
  kInvalidArgument, kNotImplemented, kInternalError, kNotInitialized,
  kOutOfMemory
}

Functions

template<class I >
IPtr< I > owned (I *p)
 Assigning newly created object to an IPtr.

Define Documentation

#define COM_COMPATIBLE   0
#define PLUGIN_API
#define INLINE_UID ( l1,
l2,
l3,
l4   ) 
Value:
{ \
   (::Steinberg::int8)((l1 & 0xFF000000) >> 24), (::Steinberg::int8)((l1 & 0x00FF0000) >> 16), \
   (::Steinberg::int8)((l1 & 0x0000FF00) >>  8), (::Steinberg::int8)((l1 & 0x000000FF)      ), \
   (::Steinberg::int8)((l2 & 0xFF000000) >> 24), (::Steinberg::int8)((l2 & 0x00FF0000) >> 16), \
   (::Steinberg::int8)((l2 & 0x0000FF00) >>  8), (::Steinberg::int8)((l2 & 0x000000FF)      ), \
   (::Steinberg::int8)((l3 & 0xFF000000) >> 24), (::Steinberg::int8)((l3 & 0x00FF0000) >> 16), \
   (::Steinberg::int8)((l3 & 0x0000FF00) >>  8), (::Steinberg::int8)((l3 & 0x000000FF)      ), \
   (::Steinberg::int8)((l4 & 0xFF000000) >> 24), (::Steinberg::int8)((l4 & 0x00FF0000) >> 16), \
   (::Steinberg::int8)((l4 & 0x0000FF00) >>  8), (::Steinberg::int8)((l4 & 0x000000FF)      )  \
}
#define DECLARE_UID ( name,
l1,
l2,
l3,
l4   )     ::Steinberg::TUID name = INLINE_UID (l1, l2, l3, l4);
#define EXTERN_UID ( name   )     extern const ::Steinberg::TUID name;
#define DECLARE_CLASS_IID ( ClassName,
l1,
l2,
l3,
l4   )     static const ::Steinberg::TUID ClassName##_iid = INLINE_UID (l1, l2, l3, l4);
#define DEF_CLASS_IID ( ClassName   )     const ::Steinberg::FUID ClassName::iid (ClassName##_iid);
#define INLINE_UID_OF ( ClassName   )     ClassName##_iid
#define INLINE_UID_FROM_FUID (  )     INLINE_UID(x.getLong1 (), x.getLong2 (), x.getLong3 (), x.getLong4 ())
#define DECLARE_FUNKNOWN_METHODS
Value:
public:                                                                                                \
   virtual ::Steinberg::tresult PLUGIN_API queryInterface (const ::Steinberg::TUID iid, void** obj); \
   virtual ::Steinberg::uint32 PLUGIN_API addRef ();                                                 \
   virtual ::Steinberg::uint32 PLUGIN_API release ();                                                \
protected :                                                                                           \
	::Steinberg::int32 __funknownRefCount;                                                            \
public:
#define DELEGATE_REFCOUNT ( ClassName   ) 
Value:
public:                                                                \
   virtual ::Steinberg::uint32 PLUGIN_API addRef ()  { return ClassName::addRef ();  } \
   virtual ::Steinberg::uint32 PLUGIN_API release () { return ClassName::release (); } \
#define IMPLEMENT_REFCOUNT ( ClassName   ) 
Value:
::Steinberg::uint32 PLUGIN_API ClassName::addRef ()                     \
{                                                                       \
   return ::Steinberg::FUnknown::atomicAdd (__funknownRefCount, 1);    \
}                                                                       \
::Steinberg::uint32 PLUGIN_API ClassName::release ()                    \
{                                                                       \
   if (::Steinberg::FUnknown::atomicAdd  (__funknownRefCount, -1) == 0)\
   {                                                                   \
      delete this;                                                    \
      return 0;                                                       \
   }                                                                   \
   return __funknownRefCount;                                          \
}
#define FUNKNOWN_CTOR   { __funknownRefCount = 1; }
#define FUNKNOWN_DTOR
#define QUERY_INTERFACE ( iid,
obj,
InterfaceIID,
InterfaceName   ) 
Value:
if (memcmp (iid, InterfaceIID, sizeof (::Steinberg::TUID)) == 0)\
{                                                               \
   addRef ();                                                  \
   *obj = static_cast< InterfaceName* >(this);                 \
   return ::Steinberg::kResultOk;                              \
}
#define IMPLEMENT_QUERYINTERFACE ( ClassName,
InterfaceName,
ClassIID   ) 
Value:
::Steinberg::tresult PLUGIN_API ClassName::queryInterface (const ::Steinberg::TUID iid, void** obj) \
{                                                                                                   \
   QUERY_INTERFACE (iid, obj, ::Steinberg::FUnknown::iid, InterfaceName)                           \
   QUERY_INTERFACE (iid, obj, ClassIID, InterfaceName)                                             \
   *obj = 0;                                                                                       \
   return ::Steinberg::kNoInterface;                                                               \
}
#define IMPLEMENT_FUNKNOWN_METHODS ( ClassName,
InterfaceName,
ClassIID   ) 
Value:
IMPLEMENT_REFCOUNT (ClassName)                                   \
   IMPLEMENT_QUERYINTERFACE (ClassName, InterfaceName, ClassIID)
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines
Empty

Copyright ©2013 Steinberg Media Technologies GmbH. All Rights Reserved.